<?php

class UsuarioController extends TMetroUI {

    private $logic;
    private $vLogic;

    public function __construct() {
        parent::__construct();
        $this->logic = new UsuarioLogic();
        $this->vLogic = new VUsuarioLogic();
    }

    public function index() {
        RedirectorHelper::goToAction('listar');
    }

    public function listar() {
        # JS
        $this->HTML->addJavaScript(PATH_TEMPLATE_JS_URL . "jquery/jquery.dataTables.js");
        $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

        # Lista de Perfis
        $this->addDados('isListUsuario', ($this->vLogic->totalRegistro() > 0) ? true : false);

        # Exibir view
        $this->TPageSecondary('lista');
    }

    public function informar() {

        if (!$this->isParam('id')) {
            RedirectorHelper::goToAction("listar");
        }

        # Add JS
        $this->HTML->addJavaScript(PATH_TEMPLATE_JS_URL . "jquery/jquery.dataTables.js");
        $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

        $this->addDados('objVUsuario', $this->vLogic->obterPorId($this->getParam('id')));


        $objPefilLogic = new VPerfilLogic();
        $isPerfil = $objPefilLogic->totalRegistro(
                "ide_perfil IN ("
                . "SELECT ide_perfil "
                . "FROM seguranca.usuario__perfil "
                . "WHERE ide_usuario = '{$this->getParam('id')}'"
                . ")"
        );
        unset($objPefilLogic);
        $this->addDados('isPerfil', ( $isPerfil > 0 ) ? true : false );
        unset($isPerfil);

        /* Definir a aba que vai ser aberta */
        $objTFrameActive = new TFrameActiveHelper('frameI', 'frame');
        $this->addDados('frameActive', $objTFrameActive);
        unset($objTFrameActive);

        $this->TPageSecondary('informa');
    }

    public function cadastrar() {
        if (isset($_POST['numeroCPF'])) {

            /* JS */
            $this->HTML->addCss(PATH_DIR_TEMPLATE_URL . 'ext/select2/select2.css');
            $this->HTML->addJavaScript(PATH_DIR_TEMPLATE_URL . 'ext/select2/select2.js');
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.validate.js");
            $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

            /* Montar exception */
            $exception = array();
            $exception['load'] = ExceptionORM::mountLoadException('Perfil', array('nome', 'responsabilidade'));

            /* Obter o perfil do usuario logado */
            $objPerfilLogic = new PerfilLogic();
            $objPerfil = $objPerfilLogic->obterPorId($this->SECURITY->getUsuario()->getIdPerfil(), true, $exception);
            unset($objPerfilLogic);
            unset($exception);

            /* Pegar os perfis reponsaveis pelo mesmo */
            $listResponsabilidade = $objPerfil->getResponsabilidade();
            unset($objPerfil);

            /* Verificar se existe perfis responsaveis */
            if (isset($listResponsabilidade[0])) {

                $this->addDados('isForm', true);

                /* Adicionar perfis a tela */
                $this->addDados("listPerfis", TFormHelper::optionSelect($listResponsabilidade));

                /* Obter dados do colaborador */
                $cpf = FormatHelper::unformatCPF($_POST['numeroCPF']);
                $objColaboradorLogic = new ColaboradorLogic();
                $objColaborador = $objColaboradorLogic->obter("num_cpf = '{$cpf}'");
                $this->addDados('objColaborador', $objColaborador);
                unset($objColaboradorLogic);
                unset($cpf);
                unset($objColaborador);
            } else {
                $this->addDados('isForm', false);
            }

            # Exibir view
            $this->TPageSecondary('cadastro');
        } else {
            # Adicionar JS
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.validate.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "validate.system.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "util.validate.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.mask.min.js");
            $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . "_validacao.js");

            # Exibir view
            $this->TPageSecondary('cadastro_validacao');
        }
    }

    public function resgatar() {
        if ($_SERVER['REQUEST_METHOD'] == "POST") {

            /* JS */
            $this->HTML->addCss(PATH_DIR_TEMPLATE_URL . 'ext/select2/select2.css');
            $this->HTML->addJavaScript(PATH_DIR_TEMPLATE_URL . 'ext/select2/select2.js');
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.validate.js");
            $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

            /* Montar exception */
            $exceptionPerfil = array();
            $exceptionPerfil['load'] = ExceptionORM::mountLoadException('Perfil', array('nome', 'responsabilidade'));

            /* Obter o perfil do usuario logado */
            $objPerfilLogic = new PerfilLogic();
            $objPerfil = $objPerfilLogic->obterPorId($this->SECURITY->getUsuario()->getIdPerfil(), true, $exceptionPerfil);
            unset($objPerfilLogic);
            unset($exceptionPerfil);

            /* Pegar os perfis reponsaveis pelo mesmo */
            $listResponsabilidade = $objPerfil->getResponsabilidade();
            unset($objPerfil);

            /* Verificar se existe perfis responsaveis */
            if (isset($listResponsabilidade[0])) {

                $this->addDados('isForm', true);

                $cpf = FormatHelper::limparString($_POST['cpf']);

                /* Obter perfis associados ao usuario */
                $exception = array();
                $exception['load'] = ExceptionORM::mountLoadException('Usuario', array('colaborador'));
                $objUsuario = $this->logic->obter("ide_usuario IN (SELECT ide_usuario FROM seguranca.view_usuario WHERE num_cpf = '{$cpf}' )", true, $exception);
                $this->addDados('idUsuario', $objUsuario->getId());
                $this->addDados('objColaborador', $objUsuario->getColaborador());
                unset($objUsuario);

                /* Adicionar perfis a tela */
                $this->addDados("listPerfis", TFormHelper::optionSelect($listResponsabilidade));
            } else {
                $this->addDados('isForm', false);
            }
            unset($listResponsabilidade);

            # Exibir view
            $this->TPageSecondary('resgatar');
        } else {
            # Adicionar JS
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.validate.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "validate.system.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "util.validate.js");
            $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.mask.min.js");
            $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . "_validacao.js");

            # Exibir view
            $this->TPageSecondary('resgatar_validacao');
        }
    }

    public function alterarSenha() {

        $this->HTML->addJavaScript(PATH_JS_CORE_URL . 'jquery.validate.js');
        $this->HTML->addJavaScript(PATH_JS_CORE_URL . "validate.system.js");
        $this->HTML->addJavaScript(PATH_JS_CORE_URL . 'jquery.pstrength-min.1.2.js');
        $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

        $this->addDados('objUsuario', $this->logic->obterPorId($this->SECURITY->getUsuario()->getId()));

        $this->TPageSecondary('alteraSenha');
    }

    public function gerenciar() {
        $objUsuario = $this->logic->obterPorId($this->SECURITY->getUsuario()->getId());
        $avatar = ($objUsuario->getAvatar() != "") ? $objUsuario->getAvatar() : "default.jpg";
        $this->addDados('avatar', $avatar);
        $this->TPageSecondary('gerencia');
    }

    public function alterarAvatar() {
        $this->HTML->addCss(PATH_CSS_CORE_URL . 'jquery.Jcrop.min.css');
        $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.validate.js");
        $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.form.min.js");
        $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.Jcrop.min.js");
        $this->HTML->addJavaScript(PATH_JS_URL . $this->_controller . "/" . $this->_action . ".js");

        $this->TPageSecondary('alteraAvatar');
    }

    public function carregarImagem() {

        $this->HTML->addJavaScript(PATH_JS_CORE_URL . "jquery.Jcrop.js");
        $this->HTML->addCss(PATH_TEMPLATE_URL . "css/jquery.Jcrop.css");

        $preview = "";
        $imagem = isset($_FILES['imagem']) ? $_FILES['imagem'] : NULL;
        $tem_crop = false;
        $img = '';
        if ($imagem['tmp_name']) {
            $avatar = "fp" . time() . mt_rand(5, 15) . md5($imagem['name']) . ".jpg";
            $imagesize = getimagesize($imagem['tmp_name']);
            if ($imagesize !== false) {
                if (move_uploaded_file($imagem['tmp_name'], "public/upload/temp/" . $avatar)) {
                    $oImg = new ImagemHelper("public/upload/temp/" . $avatar);
                    if ($oImg->valida() == 'OK') {
                        $oImg->redimensiona('600', '', '');
                        $oImg->grava("public/upload/temp/" . $avatar);

                        $imagesize = getimagesize("public/upload/temp/" . $avatar);
                        $img = '<img src="' . PATH_WEBFILES_URL . 'upload/temp/' . $avatar . '" id="jcrop" ' . $imagesize[3] . ' />';
                        $tem_crop = true;
                    }
                }
            }
        }

        $this->addDados('nome', $avatar);
        $this->addDados('imagesize', $imagesize);
        $this->addDados('img', $img);
        $this->addDados('crop', $tem_crop);

        $this->TPageSecondary('alteraAvatar');
    }

    public function cortarImagem() {
        $oImg = new ImagemHelper("public/upload/temp/" . $_POST['img']);

        $objUsuario = $this->logic->obterPorId($this->SECURITY->getUsuario()->getId());
        $objUsuario->setSenha('');
        $avatarExclusao = $objUsuario->getAvatar();
        $objUsuario->setAvatar($_POST['img']);

        $return = $this->logic->salvar($objUsuario);

        if ($oImg->valida() == 'OK') {
            $oImg->posicaoCrop($_POST['x'], $_POST['y']);
            $oImg->redimensiona($_POST['w'], $_POST['h'], 'crop');
            $oImg->redimensiona('80', '', '');
            $oImg->grava("public/upload/album/" . $_POST['img']);
        }

        unlink("public/upload/album/" . $avatarExclusao);
        unlink("public/upload/temp/" . $_POST['img']);
    }

}
